এসকিউএল - SQL : রিলেশনাল ডেটাবেজ(Relational Database)-কে এক্সেস করার জন্য SQL একটি স্ট্যান্ডার্ড ভাষা।
সুতরাং MySQL, SQL Server, Access, Oracle, Sybase, DB2 ইত্যাদি রিলেশনাল ডেটাবেজ সিস্টেমকে এক্সেস করার জন্য SQL হলো একটি স্টান্ডার্ড ভাষা।
আমাদের এই এসকিউএল টিউটোরিয়ালটিতে SQL এর একেবারে ব্যাসিক থেকে এডভ্যান্স টপিক্স-সমূহও যোগ করেছি। ফলে এই টিউটোরিয়াল শেষে এডভ্যান্স SQL বুঝার জন্য আপনাকে প্রস্তুত করে তুলবে।
kt_satt_skill_example_id=1341
রিলেশনাল ডেটাবেজ(Relational Database) এ তথ্য জমা(store), পুনরুদ্ধার(retrive) এবং পরিচালনার(manipulating) জন্য SQL একটি স্টান্ডার্ড ভাষা।
এসকিউএল(SQL) হলো স্ট্রাকচার্ড কুয়েরি ল্যাঙ্গুয়েজ(Structured Query Language) যা রিলেশনাল ডেটাবেজে সঞ্চিত ডেটা সংরক্ষণ, পুনরুদ্ধার এবং পরিচালনার জন্য ব্যবহৃত একটি স্টান্ডার্ড ভাষা।
MySQL, SQL Server, Access, Oracle, Sybase ইত্যাদি রিলেশনাল ডেটাবেজ ম্যানেজমেন্ট সিস্টেম-সমূহ(RDBMS) SQL কে স্টান্ডার্ড ভাষা হিসাবে ব্যবহার করে।
SQL ভাষা ANSI(American National Standards Institute) স্ট্যান্ডার্ড হওয়া সত্ত্বেও এর কিছু ভিন্ন ভার্সনও রয়েছে।
যাইহোক, ANSI স্ট্যান্ডার্ড মেনে চলার জন্য SQL এর সকল ভার্সন-ই প্রধান প্রধান কমান্ড-সমূহ যেমন- CREATE
, SELECT
, UPDATE
, DELETE
, INSERT
, WHERE
ইত্যাদি সাপোর্ট করে।
ডেটাবেজ থেকে তথ্য দেখাবে এমন একটি ওয়েব-সাইট তৈরী করতে যা প্রয়োজন হবেঃ
RDBMS এর পূর্ণরূপঃ Relational Database Management System.
RDBMS হলো SQL এর ভিত্তি এবং সকল মর্ডান ডেটাবেজ সিস্টেমেরও ভিত্তি। যেমন- MS SQL Server, IBM DB2, Oracle, MySQL এবং Microsoft Access।
তথ্য-সমূহ RDBMS ডেটাবেজ এর অবজেক্টে সংরক্ষিত থাকে, আমাদের কাছে এই অবজেক্টগুলো টেবিল নামে পরিচিত। একটি টেবিল সম্মন্ধযুক্ত কিছু তথ্যের(data) সংগ্রহ যা কলাম(field) এবং সারি(tuple/record) নিয়ে গঠিত। আমাদের সকল তথ্য ডেটাবেজের এই কলাম এবং সারির মধ্যেই সংরক্ষিত হয়/থাকে।
হোম-Home সিনটেক্স-Syntax ডেটাবেস তৈরী-Create DB টেবিল তৈরী-Create Table ড্রপ-Drop সিলেক্ট-Select ইনসার্ট ইন্টু-Insert Into এসকিউএল-Where এসকিউএল-And এবং Or আপডেট-Update ডিলিট-Delete লাইক-Like সিলেক্ট টপ-Select Top অর্ডার বাই-Order By গ্রুপ বাই-Group By ডিস্টিংক্ট-Distinct সিলেক্ট ইন্টু-Select Into ইনসার্ট ইন্টু সিলেক্ট-Insert Into Select এসকিউএল-Not Null ইউনিক-Unique ডিফল্ট-Default চেক-Check প্রাইমারি কি-Primary Key ফরেন কি-Foreign Key এসকিউএল-In এসকিউএল-Between এসকিউএল-Auto Increment
কনস্ট্রেইন্ট-Constraints এসকিউএল-Joins এসকিউএল-Inner Join এসকিউএল-Left Join এসকিউএল-Right Join এসকিউএল-Full Join এসকিউএল-Union এসকিউএল-Null Values এসকিউএল-Null Functions এসকিউএল-Aliases এসকিউএল-Create Index এসকিউএল-Alter এসকিউএল-Views এসকিউএল-Having এসকিউএল-Wildcards এসকিউএল-Dates এসকিউএল-Data Types
এসকিউএল-Functions এসকিউএল-Avg() এসকিউএল-Count() এসকিউএল-First() এসকিউএল-Last() এসকিউএল-Max() এসকিউএল-Min() এসকিউএল-Sum() এসকিউএল-Ucase() এসকিউএল-Lcase() এসকিউএল-Mid() এসকিউএল-Len() এসকিউএল-Round() এসকিউএল-Now() এসকিউএল-Format()
এসকিউএল-অস্থায়ী(Temporary) টেবিল এসকিউএল-Injection এসকিউএল-Hosting
একটি ডেটাবেজে প্রায়ই এক বা একাধিক টেবিল থাকে। প্রতিটি টেবিলকেই নির্দিষ্ট নাম দ্বারা শনাক্ত করা হয়। যেমন- "Student_details" অথবা "Student_result"। টেবিলের প্রতিটি সারি তথ্য নিয়ে গঠিত হয়।
উদাহরণ হিসাবে আমরা আমাদের টিউটোরিয়ালে একটি নমুনা ডেটাবেজ ব্যবহার করবো।
উদাহরণস্বরুপঃ নিচের অংশটুকু নমুনা ডেটাবেজের "Student_details" টেবিল থেকে নেওয়া হয়েছেঃ
ক্রমিক নং | শিক্ষার্থীর নাম | প্রতিষ্ঠানের নাম | ঠিকানা |
---|---|---|---|
১০১ | তামজীদ হাসান | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
১০২ | মিনহাজুর রহমান | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
১০৩ | মোঃ সবুজ হোসেন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
১০৪ | ইয়াসিন হোসেন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
১০৫ | ফরহাদ উদ্দিন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
উপরের টেবিলটিতে পাঁচটি সারি(প্রতি সারিতে একজন শিক্ষার্থী) এবং চারটি কলাম রয়েছে (ক্রমিক নং, শিক্ষার্থীর নাম, প্রতিষ্ঠানের নাম এবং ঠিকানা) যাহাতে ৫ জন শিক্ষার্থীর সম্পর্কে বিস্তারিত তথ্য রয়েছে।
SQL স্টেটমেন্ট(statement) এর মাধ্যমে ডেটাবেজের বেশির ভাগ ক্রিয়াকলাপ সম্পাদিত হয়।
নিচের SQL স্টেটমেন্টটি "Student_details" টেবিল থেকে সকল রেকর্ড সিলেক্ট করবেঃ
kt_satt_skill_example_id=1343
আমাদের এই টিউটোরিয়ালে অধিকাংশ SQL স্টেটমেন্ট পর্যায়ক্রমে তুলে ধরা হয়েছে।
আমাদের এই টিউটোরিয়ালে আমরা SQL কীওয়ার্ড-সমূহকে বড়-হাতের অক্ষরে লিখবো। এর দরুন আমরা SQL কীওয়ার্ড-সমূহকে SQL স্টেটমেন্টের মধ্যে খুব সহজেই শনাক্ত করতে পারবো।
কিছু কিছু ডেটাবেজ সিস্টেমে প্রতিটি SQL স্টেটমেন্টের শেষে একটি সেমিকোলন(;) ব্যবহার করতে হয়।
ডেটাবেজ সিস্টেমে স্টেটমেন্ট-সমূহকে আলাদা করার আদর্শ উপায় হলো সেমিকোলন(;) যা ডেটাবেজ সিস্টেম সার্ভারে একই সাথে একাধিক SQL স্টেটমেন্ট এক্সিকিউট করতে পারে।
এই টিউটোরিয়ালের প্রতিটি SQL স্টেটমেন্টের শেষে আমরা সেমিকোলন ব্যবহার করবো।
USE
- ডিফল্ট ডেটাবেজ সিলেক্ট করে।DESCRIBE
- ডেটাবেজের টেবিলের গঠন দেখায়।SELECT
- ডেটাবেজ থেকে তথ্য পুনরূদ্ধার(retrieve) করে।UPDATE
- ডেটাবেজের তথ্য আপডেট করে।DELETE
- ডেটাবেজ থেকে তথ্য ডিলেট করে।INSERT
INTO
- ডেটাবেজে নতুন তথ্য প্রবেশ করায়।CREATE
DATABASE
- নতুন ডেটাবেজ তৈরি করে।ALTER
DATABASE
- ডেটাবেজ পরিবর্তন করে।CREATE
TABLE
- নতুন টেবিল তৈরি করে।ALTER
TABLE
- টেবিল পরিবর্তন করে।DROP
TABLE
- টেবিল ডিলেট করে।CREATE
INDEX
- ইন্ডেক্স তৈরি করে।DROP
INDEX
- ইন্ডেক্স ডিলেট করে।
একটি ডেটাবেজ তৈরি করতে CREATE
DATABASE
স্টেটমেন্ট ব্যবহার করা হয়।
kt_satt_skill_example_id=1346
নিম্নের SQL স্টেটমেন্টটি "student" নামে একটি ডেটাবেজ তৈরি করেঃ
kt_satt_skill_example_id=1347
CREATE TABLE
স্টেটমেন্টটি ডেটাবেজে নতুন টেবিল তৈরি করে।
ডেটাবেজে নতুন টেবিল তৈরি করতে CREATE TABLE
স্টেটমেন্ট ব্যবহার করা হয়।
একটি টেবিল সাধারণত কলাম এবং সারি নিয়ে গঠিত হয় এবং সনাক্ত করার জন্য প্রতিটি টেবিলের অবশ্যই একটি নাম থাকতে হবে।
shortcode
"name_of_column" প্যারামিটারটি কলামের নাম ঠিক করে। "data_type" প্যারামিটারটি কলামের ডেটার টাইপ ঠিক করে। যেমন- varchar
, integer
, decimal
, date
, text
ইত্যাদি। "size" প্যারামিটারটি কলামের দৈর্ঘ্য ঠিক করে অর্থাৎ কলামের ডেটা কতটি অক্ষর ধারন করবে তা নির্ধারন করে।
এখন আমরা "Student_details" নামে একটি টেবিল তৈরি করবো যার মধ্যে ৫টি কলাম থাকবেঃ "id", "roll_number", "student_name", "institute" এবং "address"।
আমরা নিম্নে CREATE TABLE
স্টেটমেন্টটি ব্যবহার করবোঃ
shortcode
"id" কলামের ডেটা টাইপ int
হওয়ায় এটি শুধুমাত্র পূর্ণসংখ্যা জমা রাখবে। "id" এর auto_increment
নিয়ে আমরা পরবর্তীতে আলোচনা করবো। "roll_number", "student_name", "institute" এবং "address" কলাম গুলোর ডেটা টাইপ varchar
হওয়ায় এরা অক্ষর/বর্ণ জমা রাখবে এবং এদের সর্বোচ্চ দৈর্ঘ্য হবে ২৫৫টি বর্ণ।
ফাঁকা "Student_details" টেবিলটি নিম্নের ন্যায় দেখাবেঃ
আইডি নং | রোল নাম্বার | শিক্ষার্থীর নাম | প্রতিষ্ঠানের নাম | ঠিকানা |
---|---|---|---|---|
একটি বিদ্যমান টেবিলে নতুন কলাম যোগ করতে, কলাম ডিলেট করতে অথবা কোন কলাম পরিবর্তন করতে ALTER
TABLE
স্টেটমেন্ট ব্যবহার করা হয়।
একটি টেবিলে নতুন কলাম যোগ করতে নিম্নের সিনট্যাক্সটি ব্যবহার করুনঃ
ALTER TABLE name_of_table
ADD name_of_column datatype;
টেবিলে থেকে কলাম ডিলেট করতে নিম্নের সিনট্যাক্সটি ব্যবহার করুনঃ
ALTER TABLE name_of_table
DROP name_of_column;
টেবিলে কলামের ডেটা টাইপ পরিবর্তন করতে নিম্নের সিনট্যাক্সটি ব্যবহার করুনঃ
MySQL/Oracle(10G এর আগের ভার্সন) এর জন্যঃ
ALTER TABLE name_of_table
MODIFY COLUMN name_of_column datatype;
Oracle(10G এবং এর পরবর্তী ভার্সন) এর জন্যঃ
ALTER TABLE name_of_table
MODIFY name_of_column datatype;
SQL Server/MS Access এর জন্যঃ
ALTER TABLE name_of_table
ALTER COLUMN name_of_column datatype;
নিম্নের "Student_details" টেবিলটি লক্ষ্য করুনঃ
আইডি নং | রোল নাম্বার | শিক্ষার্থীর নাম | প্রতিষ্ঠানের নাম | ঠিকানা |
---|---|---|---|---|
১ | ১০১ | তামজীদ হাসান | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
২ | ১০২ | মিনহাজুর রহমান | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
৩ | ১০৩ | মোঃ সবুজ হোসেন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
৪ | ১০৪ | ইয়াসিন হোসেন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
৫ | ১০৫ | ফরহাদ উদ্দিন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
এখন আমরা "Student_details" টেবিলে "জন্ম তারিখ(Birthday)" নামে একটি কলাম যোগ করবো।
এর জন্য আমরা নিম্নবর্তী SQL স্টেটমেন্টটি ব্যবহার করবোঃ
ALTER TABLE Student_details
ADD Birthday date;
লক্ষ্য করুন "জন্ম তারিখ(Birthday)" কলামটির ডেটা টাইপ হলো date
অর্থাৎ এটি তারিখ জমা রাখবে।
এখন "Student_details" টেবিলেটি নিম্নের ন্যায় দেখাবেঃ
আইডি নং | রোল নাম্বার | শিক্ষার্থীর নাম | প্রতিষ্ঠানের নাম | ঠিকানা | জন্ম তারিখ |
---|---|---|---|---|---|
১ | ১০১ | তামজীদ হাসান | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর | |
২ | ১০২ | মিনহাজুর রহমান | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর | |
৩ | ১০৩ | মোঃ সবুজ হোসেন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর | |
৪ | ১০৪ | ইয়াসিন হোসেন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর | |
৫ | ১০৫ | ফরহাদ উদ্দিন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
এখন আমরা "Student_details" টেবিলের "জন্ম তারিখ(Birthday)" কলামের ডেটা টাইপ পরিবর্তন করবোঃ
ALTER TABLE Student_details
ALTER COLUMN Birthday year;
লক্ষ্য করুন "জন্ম তারিখ(Birthday)" কলামটির ডেটা টাইপ এখন year
অর্থাৎ এটি শুধুমাত্র দুই/চার ডিজিটের ফরম্যাটে বছর জমা রাখবে।
এখন আমরা "Student_details" টেবিলের "জন্ম তারিখ(Birthday)" কলামটিকে ডিলেট করবোঃ
ALTER TABLE Student_details
DROP COLUMN Birthday;
এখন "Student_details" টেবিলেটি নিম্নের ন্যায় দেখাবেঃ
আইডি নং | রোল নাম্বার | শিক্ষার্থীর নাম | প্রতিষ্ঠানের নাম | ঠিকানা |
---|---|---|---|---|
১ | ১০১ | তামজীদ হাসান | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
২ | ১০২ | মিনহাজুর রহমান | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
৩ | ১০৩ | মোঃ সবুজ হোসেন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
৪ | ১০৪ | ইয়াসিন হোসেন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
৫ | ১০৫ | ফরহাদ উদ্দিন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
ROP
স্টেটমেন্টটি ব্যবহার করে খুব সহজেই ইনডেক্স, টেবিল এবং ডেটাবেজ ডিলেট করা যায়।
DROP
INDEX
স্টেটমেন্টটি ব্যবহার করে একটি টেবিলের ইনডেক্স ডিলেট করা হয়।
DROP INDEX name_of_index ON name_of_table
DROP INDEX name_of_table.name_of_index
DROP INDEX name_of_index
ALTER TABLE name_of_table DROP INDEX name_of_index
DROP
TABLE
স্টেটমেন্টটি ব্যবহার করে একটি টেবিল ডিলেট করা হয়।
DROP TABLE name_of_table
DROP
DATABASE
স্টেটমেন্টটি ব্যবহার করে একটি ডেটাবেজ ডিলেট করা হয়।
DROP DATABASE name_of_database
যদি আপনার শুধুমাত্র টেবিলের তথ্য-সমূহ ডিলেট করার প্রয়োজন হয় তাহলে আপনি কী করবেন?
সেক্ষেত্রে আপনি TRUNCATE
TABLE
স্টেটমেন্টটি ব্যবহার করতে পারেনঃ
TRUNCATE TABLE name_of_table
ডেটাবেজ থেকে তথ্য(Data) সিলেক্ট/পুনরূদ্ধার করতে SQL SELECT স্টেটমেন্টটি ব্যবহার করা হয়।
SELECT স্টেটমেন্টটি ডেটাবেজ থেকে তথ্য সিলেক্ট করে।
ডেটাবেজ থেকে রিটার্ন ডেটা ফলাফল টেবিলে জমা হয়, যাহাকে আমরা result-set বলে থাকি।
SELECT name_of_column, name_of_column FROM name_of_table;
এবং
SELECT * FROM name_of_table;
এখানে name_of_column হলো টেবিলের মধ্যে কলামের নাম এবং name_of_table হলো টেবিলের নাম।
SELECT স্টেটমেন্টের ব্যবহার দেখার জন্য আমরা আমাদের নমুনা ডেটাবেজ Student ব্যবহার করবো।
উদাহরণস্বরূপঃ SELECT স্টেটমেন্ট ব্যবহার করে "Student_details" টেবিল থেকে নিচের অংশটুকু নেওয়া(select) হয়েছে।
ক্রমিক নং | শিক্ষার্থীর নাম | প্রতিষ্ঠানের নাম | ঠিকানা |
---|---|---|---|
১০১ | তামজীদ হাসান | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
১০২ | মিনহাজুর রহমান | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
১০৩ | মোঃ সবুজ হোসেন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
১০৪ | ইয়াসিন হোসেন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
১০৫ | ফরহাদ উদ্দিন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
নিম্নের SQL SELECT স্টেটমেন্টটি "Student_details" টেবিলের "শিক্ষার্থীর নাম(Student_name)" এবং "প্রতিষ্ঠানের নাম(Institute)" এই দুই কলামকে সিলেক্ট করবেঃ
SELECT Student_name, Institute FROM Student_details;
নিম্নের SELECT স্টেটমেন্টটি "Student_details" টেবিলের সকল কলামকে সিলেক্ট করবেঃ
SELECT * FROM Student_details;
ডেটাবেজ সফটওয়ার সিস্টেমে Result-set ন্যাভিগেশন ব্যবহার করা হয়। এটি প্রোগ্রামিং ফাংশন। এর গুরুত্বপূর্ণ কিছু ফাংশন হলোঃ Move-To-First-Record, Get-Record-Content, Move-To-Next-Record, Get-Record-Count ইত্যাদি।
এই ধরনের প্রোগ্রামিং ফাংশন গুলো আমাদের SQL টিউটোরিয়ালের অংশ নয়। ডেটাবেজ তথ্যকে প্রোগ্রামিং ফাংশন এর মাধ্যমে অ্যাক্সেস করা শিখতে হলে, অনুগ্রহ করে আমাদের পিএইচপি টিউটোরিয়াল দেখুন।
ডেটাবেজে একই তথ্য একাধিকবার থাকলে SELECT DISTINCT স্টেটমেন্টটি ব্যবহার করলে ডুপ্লিকেট তথ্য গুলোর শুধুমাত্র একটি আউটপুট আসে।
ডেটাবেজর টেবিলে একই তথ্য একাধিকবার থাকতে পারে, এই ডুপ্লিকেট তথ্য গুলোকে একক ভাবে পেতে আপনি SELECT DISTINCT স্টেটমেন্টটি ব্যবহার করতে পারেন। SELECT DISTINCT স্টেটমেন্টটি দ্বারা আপনার ডেটাবেজের অন্তর্ভুক্ত ডুপ্লিকেট তথ্য বাদ দিয়ে স্বতন্ত্রভাবে তালিকাবদ্ধ করতে পারবেন।
DISTINCT কিওয়ার্ডটি ব্যবহার করে আপনি শুধুমাত্র স্বতন্ত্র মানগুলো পেতে পারেন।
SELECT DISTINCT name_of_column's
FROM name_of_table;
SELECT DISTINCT স্টেটমেন্টের ব্যবহার দেখার জন্য আমরা আমাদের নমুনা ডেটাবেজ Student ব্যবহার করবো।
নিচের অংশটি "Student_details" টেবিল থেকে নেওয়া হয়েছেঃ
আইডি নং | রোল নাম্বার | শিক্ষার্থীর নাম | প্রতিষ্ঠানের নাম | ঠিকানা |
---|---|---|---|---|
১ | ১০১ | তামজীদ হাসান | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
২ | ১০২ | মিনহাজুর রহমান | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
৩ | ১০৩ | মোঃ সবুজ হোসেন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
৪ | ১০৪ | ইয়াসিন হোসেন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
৫ | ১০৫ | ফরহাদ উদ্দিন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
নিম্নের SQL DISTINCTস্টেটমেন্টটি "Student_details" টেবিলের "ঠিকানা(Address)" কলামকে সিলেক্ট করবেঃ
SELECT DISTINCT Address FROM Student_details;
INSERT INTO স্টেটমেন্টটি ব্যবহার করে ডেটাবেজের টেবিলে নতুন তথ্য সংযোগ(insert) করা যায়।
INSERT INTO স্টেটমেন্টটি ব্যবহার করে ডেটাবেজের টেবিলে নতুন তথ্য সংযোগ করা যায়।
INSERT INTO স্টেটমেন্টটি দুইভাবে লেখা যেতে পারে।
পদ্ধতি১ঃ নিম্নের সিনট্যাক্সে শুধুমাত্র ভ্যালু নির্দিষ্ট করে দেওয়া হয়েছে। কলামের নাম নির্দিষ্ট করে দেওয়া হয় নি।
INSERT INTO name_of_table VALUES (value1,value2,value3,...);
পদ্ধতি২ঃ নিম্নের সিনট্যাক্সে কলাম নাম এবং এর ভ্যালু নির্দিষ্ট করে দেওয়া হয়েছেঃ
INSERT INTO name_of_table (name_of_column1,name_of_column2,name_of_column3,...)
VALUES (value1,value2,value3,...);
বিঃদ্রঃ টেবিলে ডেটা INSERT করার সময় যদি কলামের নাম ব্যবহার না করেন তাহলে ভ্যালু-সমূহের ক্রম কলাম অনুযায়ী ঠিক রাখতে হবে।
INSERT INTO স্টেটমেন্টের ব্যবহার দেখানোর জন্য আমরা আমাদের নমুনা ডেটাবেজ Student ব্যবহার করবো।
উদাহরণস্বরূপঃ SELECT স্টেটমেন্ট ব্যবহার করে "Student_details" টেবিল থেকে নিচের অংশটুকু নেওয়া(select) হয়েছে।
আইডি নং | রোল নাম্বার | শিক্ষার্থীর নাম | প্রতিষ্ঠানের নাম | ঠিকানা |
---|---|---|---|---|
১ | ১০১ | তামজীদ হাসান | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
২ | ১০২ | মিনহাজুর রহমান | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
৩ | ১০৩ | মোঃ সবুজ হোসেন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
৪ | ১০৪ | ইয়াসিন হোসেন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
৫ | ১০৫ | ফরহাদ উদ্দিন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
নিম্নের কোড ব্যবহার করে "Student_details" টেবিলে আপনি একটি নতুন সারি(রেকর্ড) যোগ করতে পারবেন।
INSERT INTO Student_details (Roll_number, Student_name, Institute, Address)
VALUES ('১০৬','নাসির হোসেন','জাতীয় বিশ্ববিদ্যালয়','চাঁদপুর');
এখন "Student_details" টেবিলের তথ্যগুলো এমন দেখাবেঃ
আইডি নং | রোল নাম্বার | শিক্ষার্থীর নাম | প্রতিষ্ঠানের নাম | ঠিকানা |
---|---|---|---|---|
১ | ১০১ | তামজীদ হাসান | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
২ | ১০২ | মিনহাজুর রহমান | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
৩ | ১০৩ | মোঃ সবুজ হোসেন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
৪ | ১০৪ | ইয়াসিন হোসেন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
৫ | ১০৫ | ফরহাদ উদ্দিন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
৬ | ১০৬ | নাসির হোসেন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
আপনি কি লক্ষ্য করেছেন যে, "আইডি নং(Id)" ফিল্ডে আমরা কোনো নম্বর ইনপুট দেইনি?
টেবিলের "আইডি নং(Id)" কলামটিতে AUTO_INCREMENT সেট করার ফলে টেবিলে নতুন রেকর্ড যোগ হলেই এর ভ্যালু স্বয়ংক্রিয়ভাবে এক বৃদ্ধি পাবে।
শুধুমাত্র নির্দিষ্ট কিছু কলামেও তথ্য ইনপুট করা সম্ভব।
নিম্নের INSERT INTO স্টেটমেন্টটি "Student_details" টেবিলে একটি নতুন রেকর্ড যুক্ত করবে। কিন্তু শুধুমাত্র "শিক্ষার্থীর নাম(Student_name)", "প্রতিষ্ঠানের নাম(Institute)" এবং "ঠিকানা(Address)" কলামে তথ্য ইনপুট নিবে এবং "Id" কলামটি স্বয়ংক্রিয়ভাবে এর ভ্যালু এক বদ্ধি করে নিজেকে আপডেট করে নিবেঃ
INSERT INTO Student_details (Student_name, Institute)
VALUES ('মোঃ ফয়সাল ইসলাম','জাতীয় বিশ্ববিদ্যালয়', 'রাজশাহী');
এখন "Student_details" টেবিলের তথ্য গুলো এমন দেখাবেঃ
আইডি নং | রোল নাম্বার | শিক্ষার্থীর নাম | প্রতিষ্ঠানের নাম | ঠিকানা |
---|---|---|---|---|
১ | ১০১ | তামজীদ হাসান | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
২ | ১০২ | মিনহাজুর রহমান | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
৩ | ১০৩ | মোঃ সবুজ হোসেন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
৪ | ১০৪ | ইয়াসিন হোসেন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
৫ | ১০৫ | ফরহাদ উদ্দিন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
৬ | ১০৬ | নাসির হোসেন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
৭ | খালি(null) | মোঃ ফয়সাল ইসলাম | জাতীয় বিশ্ববিদ্যালয় | রাজশাহী |
রেকর্ড ফিল্টার করার জন্য SQL WHERE clause ব্যবহৃত হয়।
নির্দিষ্ট শর্ত সাপেক্ষে ডেটাবেজ থেকে তথ্য পুনরূদ্ধারের জন্য SQL WHERE clause ব্যবহার করা হয়। কেবল শর্ত পূরন হলেই আপনি আপনার কাংখিত ফলাফল পাবেন।
SELECT name_of_column, name_of_column
FROM name_of_table
WHERE name_of_column operator value;
WHERE clause শুধু তথ্য সিলেক্টের জন্য নয় , বরং তথ্য আপডেট এবং ডিলেট করার জন্যও ব্যবহার করা হয়।
বিঃদ্রঃ SQL এর WHERE clause অন্যান্য প্রোগ্রামিং ল্যাঙ্গুয়েজ এর কন্ডিশনাল(If) স্টেটমেন্টের মতই।
WHERE clause এর ব্যবহার দেখানোর জন্য আমরা আমাদের নমুনা ডেটাবেজ Student ব্যবহার করবো।
নিম্নের SQl WHERE স্টেটমেন্টটি "Student_details" টেবিলের "ঢাকা" ঠিকানা অন্তর্ভুক্ত সকল শিক্ষার্থীকে সিলেক্ট করবেঃ
SELECT * FROM Student_details
WHERE Address="ঢাকা";
SQl এ টেক্সট লেখার জন্য একক উদ্ধৃতির প্রয়োজন হয়। অনেক ডেটাবেজে ডাবল উদ্ধৃতি চিহ্নের প্রয়োজনও হতে পারে।
যাইহোক, সাংখ্যার ক্ষেত্রে উদ্ধৃতি চিহ্ন(' ') ব্যবহারের প্রয়োজন হয় না।
SELECT * FROM Student_details
WHERE Id=1;
নিম্নের অপারেটর গুলো WHERE clause এ ব্যবহার করা হয়ঃ
অপারেটর | বর্ণনা |
---|---|
= | সমান |
<> | সমান না। বিঃদ্রঃ কিছু SQl ভার্সনে এই অপারেটকে != হিসেবে ব্যবহার করা হয় |
> | বড় |
< | ছোট |
>= | বড় অথবা সমান |
<= | ছোট অথবা সমান |
BETWEEN | একটি নির্দিষ্ট সীমার মধ্যে |
LIKE | সার্চ এর জন্য প্যাটার্ন |
IN | একটি কলামের জন্য একাধিক সম্ভাব্য মান উল্লেখ করা |
ডেটাবেজের তথ্য গুলোকে এক বা একাধিক শর্ত দ্বারা ফিল্টার করার জন্য AND এবং OR অপারেটর দুটি ব্যবহার করা হয়।
AND অপারেটরটি তখনই তথ্য গুলো দেখাবে যখন এর প্রথম এবং দ্বিতীয় শর্তটি সত্য হবে।
OR অপারেটরটি তখনই তথ্য গুলো দেখাবে যখন এর প্রথম অথবা দ্বিতীয় শর্তের মধ্যে যেকোন একটি শর্ত সত্য হবে।
AND এবং OR অপারেটর এর ব্যবহার দেখার জন্য আমরা আমাদের নমুনা ডেটাবেজ Student ব্যবহার করবো।
নিচের SQL AND স্টেটমেন্টি ডেটাবেজের "student_details" টেবিল থেকে প্রতিষ্ঠান "জাতীয় বিশ্ববিদ্যালয়" এবং ঠিকানা "ঢাকা" এর অন্তর্ভুক্ত তথ্য গুলোকে সিলেক্ট করবেঃ
SELECT * FROM Student_details
WHERE institute="জাতীয় বিশ্ববিদ্যালয়"
AND Address="ঢাকা";
নিচের SQLOR স্টেটমেন্টি ডেটাবেজের "Student_details" টেবিল থেকে "চাঁদপুর" অথবা "ঢাকা" ঠিকানার অন্তর্ভুক্ত তথ্য গুলোকে সিলেক্ট করবেঃ
SELECT * FROM Student_details
WHERE Address="চাঁদপুর"
OR Address="ঢাকা";
আপনি AND এবং OR অপারেটর দুটিকে একত্রে ব্যবহার করতে পারেন। যদি অধিক জটিল এক্সপ্রেশন হয় সে ক্ষেত্রে প্রথম বন্ধনী ব্যবহার করতে পারেন।
নিচের SQL স্টেটমেন্টি ডেটাবেজের "Student_details" টেবিল থেকে প্রতিষ্ঠান "জাতীয় বিশ্ববিদ্যালয" এবং "চাঁদপুর" অথবা "ঢাকা" ঠিকানার অন্তর্ভুক্ত তথ্য গুলোকে সিলেক্ট করবেঃ
SELECT * FROM Student_details
WHERE institute="জাতীয় বিশ্ববিদ্যালয়"
AND (Address="চাঁদপুর" OR Address="ঢাকা");
UPDATE স্টেটমেন্টটি ব্যবহার করে টেবিলের তথ্য গুলোকে আপডেট করা যায়।
ডেটাবেজের তথ্য আপডেট করার জন্য UPDATE স্টেটমেন্ট ব্যবহার করা হয়।
UPDATE name_of_table
SET name_of_column1=value1, name_of_column2=value2, ...
WHERE column=value;
লক্ষ্য করলে দেখবেন যে, UPDATE স্টেটমেন্ট এর মধ্যে WHEREকন্ডিশনটি ব্যবহার করা হয়েছে!
কোন কোন তথ্যগুলো আপডেট করতে হবে নির্দিষ্ট করে দেওয়ার জন্য WHERE কন্ডিশনটি ব্যবহার করা হয়। যদি এটি ব্যবহার করা না হয় তাহলে ডেটাবেজে অবস্থিত সকল তথ্য আপডেট হয়ে যাবে!
UPDATE স্টেটমেন্টের ব্যবহার দেখানোর জন্য আমরা আমাদের নমুনা ডেটাবেজ Student ব্যবহার করবো।
নিচের অংশটি "Student_details" টেবিল থেকে নেওয়া হয়েছেঃ
আইডি নং | রোল নাম্বার | শিক্ষার্থীর নাম | প্রতিষ্ঠানের নাম | ঠিকানা |
---|---|---|---|---|
১ | ১০১ | তামজীদ হাসান | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
২ | ১০২ | মিনহাজুর রহমান | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
৩ | ১০৩ | মোঃ সবুজ হোসেন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
৪ | ১০৪ | ইয়াসিন হোসেন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
৫ | ১০৫ | ফরহাদ উদ্দিন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
নিচের UPDATE স্টেটমেন্টের মাধ্যমে "Student_details" টেবিলের "ফরহাদ উদ্দিন" এর "Roll_number" এবং "Address" কলামের তথ্য আপডেট করা হয়েছে।
UPDATE Student_details
SET Roll_number="১৩১", Address="চাঁদপুর"
WHERE Student_name="ফরহাদ
উদ্দিন";
এখন "Student_details" টেবিলের তথ্য গুলো এমন দেখাবেঃ
আইডি নং | রোল নাম্বার | শিক্ষার্থীর নাম | প্রতিষ্ঠানের নাম | ঠিকানা |
---|---|---|---|---|
১ | ১০১ | তামজীদ হাসান | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
২ | ১০২ | মিনহাজুর রহমান | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
৩ | ১০৩ | মোঃ সবুজ হোসেন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
৪ | ১০৪ | ইয়াসিন হোসেন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
৫ | ১৩১ | ফরহাদ উদ্দিন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
ডেটাবেজের তথ্য আপডেট করার সময় অবশ্যই সতর্কতা অবলম্বন করা উচিত। তথ্য আপডেট করার সময় যদি WHERE কন্ডিশনটি ব্যবহার না করেন তাহলে সমস্ত রেকর্ড আপডেট হয়ে যাবে!
UPDATE Student_details
SET Roll_number="১৩১", Address="ঢাকা";
এখন "Student_details" টেবিলের তথ্য গুলো এমন দেখাবেঃ
আইডি নং | রোল নাম্বার | শিক্ষার্থীর নাম | প্রতিষ্ঠানের নাম | ঠিকানা |
---|---|---|---|---|
১ | ১৩১ | তামজীদ হাসান | জাতীয় বিশ্ববিদ্যালয় | ঢাকা |
২ | ১৩১ | মিনহাজুর রহমান | জাতীয় বিশ্ববিদ্যালয় | ঢাকা |
৩ | ১৩১ | মোঃ সবুজ হোসেন | জাতীয় বিশ্ববিদ্যালয় | ঢাকা |
৪ | ১৩১ | ইয়াসিন হোসেন | জাতীয় বিশ্ববিদ্যালয় | ঢাকা |
৫ | ১৩১ | ফরহাদ উদ্দিন | জাতীয় বিশ্ববিদ্যালয় | ঢাকা |
DELETEস্টেটমেন্ট ব্যবহার করে টেবিলের তথ্য ডিলেট করা যায়।
DELETE স্টেটমেন্টটি ব্যবহার করে টেবিলের সারি গুলোকে ডিলেট করা যায়।
DELETE FROM name_of_table
WHERE column=value;
লক্ষ্য করলে দেখবেন যে, DELETE স্টেটমেন্ট এর মধ্যে WHERE কন্ডিশনটি ব্যবহার করা হয়েছে!
কোন কোন তথ্যগুলো আপডেট করতে হবে নির্দিষ্ট করে দেওয়ার জন্য WHERE কন্ডিশনটি ব্যবহার করা হয়। যদি এটি ব্যবহার করা না হয় তাহলে ডেটাবেজে অবস্থিত সকল তথ্য ডিলেট হয়ে যাবে!
DELETE স্টেটমেন্টের ব্যবহার দেখার জন্য আমরা আমাদের নমুনা ডেটাবেজ Student ব্যবহার করবো।
নিচের অংশটি "Student_details" টেবিল থেকে নেওয়া হয়েছেঃ
আইডি নং | রোল নাম্বার | শিক্ষার্থীর নাম | প্রতিষ্ঠানের নাম | ঠিকানা |
---|---|---|---|---|
১ | ১০১ | তামজীদ হাসান | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
২ | ১০২ | মিনহাজুর রহমান | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
৩ | ১০৩ | মোঃ সবুজ হোসেন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
৪ | ১০৪ | ইয়াসিন হোসেন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
৫ | ১০৫ | ফরহাদ উদ্দিন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
নিচের DELETE স্টেটমেন্টের মাধ্যমে "Student_details" টেবিলের "তামজীদ হাসান" এর তথ্য delete করা হয়েছে।
DELETE FROM Student_details
WHERE Student_name="তামজীদ হাসান";
এখন "Student_details" টেবিলের তথ্য গুলো এমন দেখাবেঃ
আইডি নং | রোল নাম্বার | শিক্ষার্থীর নাম | প্রতিষ্ঠানের নাম | ঠিকানা |
---|---|---|---|---|
২ | ১০২ | মিনহাজুর রহমান | জাতীয় বিশ্ববিদ্যালয় | ঢাকা |
৩ | ১০৩ | মোঃ সবুজ হোসেন | জাতীয় বিশ্ববিদ্যালয় | ঢাকা |
৪ | ১০৪ | ইয়াসিন হোসেন | জাতীয় বিশ্ববিদ্যালয় | ঢাকা |
৫ | ১০৫ | ফরহাদ উদ্দিন | জাতীয় বিশ্ববিদ্যালয় | ঢাকা |
একটি টেবিলকে ডিলেট না করেই এর সকল তথ্য ডিলেট করা সম্ভব। অর্থাৎ টেবিলের গঠন, এট্রিবিউট এবং ইন্ডেক্স গুলো যথাযথ অবস্থায় থেকে যাবে কিন্তু এর মধ্যে অন্তর্ভুক্ত তথ্য গুলো ডিলেট হয়ে যাবেঃ
DELETE FROM name_of_table;
অথবা
DELETE * FROM name_of_table;
বিঃদ্রঃ তথ্য ডিলেট করার সময় অবশ্যই সর্তকতা অবলম্বন করতে হবে, কারন একবার তথ্য ডিলেট হয়ে গেলে তা আর পুনরায় ফিরানো সম্ভব না!
একটি কলাম থেকে নির্দিষ্ট প্যাটার্ন অনুযায়ী তথ্য অনুসন্ধান করার জন্য WHERE
Clause এর সাথে SQL LIKE অপারেটরটি ব্যবহার করা হয়।
SQL LIKE অপারেটরটি একটি কলাম থেকে নির্দিষ্ট প্যাটার্ন অনুযায়ী তথ্য অনুসন্ধান করে।
SELECT name_of_column's
FROM name_of_table
WHERE name_of_column LIKE pattern;
LIKE অপারেটর এর ব্যবহার দেখার জন্য আমরা আমাদের নমুনা ডেটাবেজ Student ব্যবহার করবো।
নিচের অংশটি "Student_details" টেবিল থেকে নেওয়া হয়েছেঃ
আইডি নং | রোল নাম্বার | শিক্ষার্থীর নাম | প্রতিষ্ঠানের নাম | ঠিকানা |
---|---|---|---|---|
১ | ১০১ | তামজীদ হাসান | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
২ | ১০২ | মিনহাজুর রহমান | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
৩ | ১০৩ | মোঃ সবুজ হোসেন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
৪ | ১০৪ | ইয়াসিন হোসেন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
৫ | ১০৫ | ফরহাদ উদ্দিন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
নিম্নের SQL LIKEস্টেটমেন্টটি "Student_details" টেবিল থেকে "শিক্ষার্থীর নাম(Student_name)" কলামে অবস্থিত প্রথম অক্ষর "ম" বিশিষ্ট সকল তথ্যকে নিয়ে আসবেঃ
SELECT * FROM Student_details
WHERE Student_name LIKE 'ম%';
বিঃদ্রঃ "%" চিহ্নটি প্যাটার্ন(pattern) এর পূর্বে অথবা পরে ওয়াইল্ডকার্ড(wildcard) নির্ধারণ করতে ব্যবহৃত হয়। পরবর্তীতে আপনি ওয়াইল্ডকার্ড সম্পর্কে আরো বেশী জানবেন।
নিম্নের SQL LIKE স্টেটমেন্টটি "Student_details" টেবিল থেকে "শিক্ষার্থীর নাম(Student_name)" কলামে অবস্থিত শেষ অক্ষর "ন" বিশিষ্ট সকল তথ্যকে নিয়ে আসবেঃ
SELECT * FROM Student_details
WHERE Student_name LIKE '%ন';
নিম্নের SQL LIKE স্টেটমেন্টটি "Student_details" টেবিল থেকে "ঠিকানা(Address)" কলামে অবস্থিত যে সকল তথ্য গুলোতে "ঢাকা" রয়েছে ঐ সকল তথ্যকে নিয়ে আসবেঃ
SELECT * FROM Student_details
WHERE Address LIKE '%ঢাকা%';
NOT কিওয়ার্ড দ্বারা আপনি ঐ সকল তথ্য নিয়ে আসতে পারবেন যা প্যাটার্নের সাথে মিলে না।
নিম্নের SQL LIKE স্টেটমেন্টটি "Student_details" টেবিল থেকে "ঠিকানা(Address)" কলামে অবস্থিত যে সকল তথ্য গুলোতে "চাঁদপুর" অবস্থিত ঐ সকল তথ্যকে নিবেনাঃ
SELECT * FROM Student_details
WHERE Address NOT LIKE '%চাঁদপুর%';
SQL SELECT TOP কমান্ডটি ব্যবহার করে ডেটাবেজ থেকে নির্দিষ্ট সংখ্যক তথ্য পাওয়া যায়। হাজার হাজার তথ্য সম্বলিত টেবিল থেকে কাংখিত তথ্য খুঁজে বের করার জন্য SELECT TOP কমান্ডটি ব্যবহার করা হয়।
বিঃদ্রঃ সকল ডেটাবেজে SELECT TOP কমান্ডটি সার্পোট করে না। MySQL এর পরিবর্তে LIMIT ব্যবহার করে এবং Oracle এর পরিবর্তে ROWNUM ব্যবহার করে।
SELECT TOP number name_of_column's
FROM name_of_table;
অথবা
SELECT TOP percent name_of_column's
FROM name_of_table;
SELECT name_of_column's
FROM name_of_table
LIMIT number;
SELECT *
FROM Student_details
LIMIT 5;
SELECT name_of_column's
FROM name_of_table
WHERE ROWNUM <= number;
SELECT *
FROM Student_details
WHERE ROWNUM <=5;
SELECT TOP স্টেটমেন্টের ব্যবহার দেখার জন্য আমরা আমাদের নমুনা ডেটাবেজ Student ব্যবহার করবো।
নিচের অংশটি "Student_details" টেবিল থেকে নেওয়া হয়েছেঃ
আইডি নং | রোল নাম্বার | শিক্ষার্থীর নাম | প্রতিষ্ঠানের নাম | ঠিকানা |
---|---|---|---|---|
১ | ১০১ | তামজীদ হাসান | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
২ | ১০২ | মিনহাজুর রহমান | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
৩ | ১০৩ | মোঃ সবুজ হোসেন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
৪ | ১০৪ | ইয়াসিন হোসেন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
৫ | ১০৫ | ফরহাদ উদ্দিন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
নিম্নের SQL SELECT TOP স্টেটমেন্টটি "Student_details" টেবিল থেকে প্রথম দুইটি রেকর্ডকে সিলেক্ট করবেঃ
SELECT TOP 2 * FROM Student_details;
নিম্নের SQL SELECT TOP স্টেটমেন্টটি "Student_details" টেবিল থেকে প্রথম ৫০% রেকর্ডকে সিলেক্ট করবেঃ
SELECT TOP 50 PERCENT * FROM Student_details;
এক বা একাধিক কলামের রেজাল্ট-সেট কে গ্রুপ করার জন্য Aggregate ফাংশন যেমন- MIN, MAX, AVG, COUNT, SUM ইত্যাদির সাথে প্রায়ই GROUP BY স্টেটমেন্টটি ব্যবহার করা হয়।
GROUP BY স্টেটমেন্ট এর মাধ্যমে এক বা একাধিক কলামের রেজাল্ট-সেট কে একত্রিত(group) করা যায়।
SELECT aggregate_function(name_of_column), name_of_column
FROM name_of_table
GROUP BY name_of_column's;
SELECT COUNT(id), Address
FROM Student_details
GROUP BY Address;
GROUP BYস্টেটমেন্টের ব্যবহার দেখার জন্য আমরা আমাদের নমুনা ডেটাবেজ Student ব্যবহার করবো।
নিচের অংশটি "Student_details" টেবিল থেকে নেওয়া হয়েছেঃ
আইডি নং | রোল নাম্বার | শিক্ষার্থীর নাম | প্রতিষ্ঠানের নাম | ঠিকানা |
---|---|---|---|---|
১ | ১০১ | তামজীদ হাসান | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
২ | ১০২ | মিনহাজুর রহমান | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
৩ | ১০৩ | মোঃ সবুজ হোসেন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
৪ | ১০৪ | ইয়াসিন হোসেন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
৫ | ১০৫ | ফরহাদ উদ্দিন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
নিচের অংশটি "Student_result" টেবিল থেকে নেওয়াঃ
আইডি নং | রোল নাম্বার | ফলাফল |
---|---|---|
১ | ১০১ | A+ |
২ | ১০২ | A+ |
৩ | ১০৩ | A+ |
৪ | ১০৪ | A+ |
৫ | ১০৫ | A+ |
এখন আমরা প্রতিটি শিক্ষার্থীর ফলাফল খুঁজে বের করবো।
নিম্নলিখিত SQL স্টেটমেন্ট দ্বারা আমরা GROUP BY এর ব্যবহার দেখবোঃ
SELECT student_details.student_name,student_result.result AS
Result FROM student_result LEFT JOIN student_details
ON student_result.roll_number = student_details.roll_number
GROUP BY student_name;
MIN
- একটি প্রদত্ত কলামের সর্বোনিম্ন মান রিটার্ন করে।MAX
- একটি প্রদত্ত কলামের সর্বোচ্চ মান রিটার্ন করে।SUM
- একটি প্রদত্ত কলামে সংখ্যামান-সমূহের যোগফল রিটার্ন করে।AVG
- একটি প্রদত্ত কলামের গড় মান রিটার্ন করে।COUNT
- প্রদত্ত কলামের মান-সমূহের মোট সংখ্যা রিটার্ন করে।COUNT
(*)
- একটি টেবিলে মোট সারির সংখ্যা রিটার্ন করে।
SQL দ্বারা আমরা এক টেবিল থেকে তথ্য অন্য টেবিলে কপি করতে পারি। আপনি SQL SELECT INTOস্টেটমেন্ট দ্বারা একটি টেবিল থেকে তথ্য কপি করে নতুন একটি টেবিলে রাখতে পারেন।
SQL SELECT INTO স্টেটমেন্টটি একটি টেবিলের তথ্য কপি করে নতুন একটি টেবিলে রাখে।
আপনি নিম্নের সিনট্যাক্সের মাধ্যমে একটি টেবিলের সকল কলামকে কপি করে একটি নতুন টেবিলের মধ্যে রাখতে পারবেনঃ
SELECT *
INTO new_table IN external_database
FROM name_of_table;
অথবা আপনার ইচ্ছামত কলামকে কপি করে নতুন টেবিলে রাখতে পারেনঃ
SELECT name_of_column's
INTO new_table IN external_database
FROM name_of_table;
নতুন টেবিলটির কলামের নাম এবং টাইপ SELECT স্টেটমেন্টে ডিফাইন করা থাকে। আপনি ইচ্ছা করলেAS clause ব্যবহার করে তা পরিবর্তন করতে পারেন।
চলুন "Student_details" টেবিলের একটি ব্যাকআপ কপি তৈরী করিঃ
SELECT name_of_column's
INTO Student_details_Backup
FROM Student_details;
IN Clause ব্যবহার করে টেবিলের তথ্য গুলো অন্য একটি ডেটাবেজে কপি করিঃ
SELECT name_of_column's
INTO Student_details_Backup IN 'Backup_database.mdb'
FROM Student_details;
কিছু সংখ্যক কলাম একটি নতুন টেবিলে কপি করিঃ
SELECT Student_name, Address
INTO Student_details_Backup
FROM Student_details;
"Student_details" টেবিলের "ঢাকা" ঠিকানার অন্তর্ভুক্ত সকল তথ্য নতুন একটি টেবিলে কপি করিঃ
SELECT *
INTO Student_details_Backup
FROM Student_details
WHERE Address="ঢাকা";
একাধিক টেবিলের তথ্য একটি নতুন টেবিলে কপি করিঃ
SELECT Student_details.Student_name, Student_result.result
INTO Student_details_Backup
FROM Student_details
LEFT JOIN Student_result
ON Student_details.Roll_number = Student_result.Roll_number;
অন্য একটি টেবিলের মডেল(schema) ব্যবহার করেও SELECT INTO স্টেটমেন্ট একটি নতুন ও খালি টেবিল তৈরী করতে পারে। এক্ষেত্রে কুয়েরি করার সময় শুধুমাত্র একটি WHERE clause যোগ করলে কোন ডেটা রিটার্ন করবে নাঃ
SELECT *
INTO new_table
FROM name_of_table
WHERE 1=0;
SQL দ্বারা আমরা এক টেবিলের তথ্য অন্য টেবিলে কপি করতে পারি। আপনি SQL SELECT INTO … SELECT স্টেটমেন্টটি ব্যবহার করে এক টেবিলের তথ্য পূর্ব থেকে বিদ্যমান অন্য একটি টেবিলে কপি করে রাখতে পারেন।
SQL SELECT INTO … SELECT স্টেটমেন্টটি এক টেবিল থেকে তথ্য কপি করে পূর্ব থেকে বিদ্যমান অন্য একটি টেবিলে জমা রাখে। এক্ষেত্রে টার্গেট টেবিলে বিদ্যমান কোনো সারি প্রভাবিত হবে না।
আপনি একটি টেবিলের সকল কলামকে কপি করে পূর্ব থেকে বিদ্যমান একটি টেবিলের মধ্যে রাখতে পারেনঃ
INSERT INTO data_table
SELECT * FROM target_table;
অথবা আপনি আপনার ইচ্ছামত কলাম কপি করে পূর্ব থেকে বিদ্যমান টেবিলে রাখতে পারেনঃ
INSERT INTO data_table
(name_of_column)
SELECT name_of_column
FROM target_table;
SELECT DISTINCT স্টেটমেন্টের ব্যবহার দেখার জন্য আমরা আমাদের নমুনা ডেটাবেজ Student ব্যবহার করবো।
নিচের অংশটি "Student_details" টেবিল থেকে নেওয়া হয়েছেঃ
আইডি নং | রোল নাম্বার | শিক্ষার্থীর নাম | প্রতিষ্ঠানের নাম | ঠিকানা |
---|---|---|---|---|
১ | ১০১ | তামজীদ হাসান | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
২ | ১০২ | মিনহাজুর রহমান | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
৩ | ১০৩ | মোঃ সবুজ হোসেন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
৪ | ১০৪ | ইয়াসিন হোসেন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
৫ | ১০৫ | ফরহাদ উদ্দিন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
নিচের অংশটি "Teacher_details" টেবিল থেকে নেওয়াঃ
আইডি নং | শিক্ষকের নাম | ঠিকানা |
---|---|---|
১ | মোঃ সাইফুল ইসলাম | ঢাকা |
২ | ডঃ নিতাই কুমার শাহা | রাজশাহী |
৩ | মোঃ আবুল কালাম আজাদ | চাঁদপুর |
৪ | রূপক রায় | চাঁদপুর |
৫ | নাদিমা আক্তার | ঢাকা |
"Teacher_details" টেবিল থেকে কিছু কলামের তথ্য কপি করে "Student_details" টেবিলে রাখিঃ
INSERT INTO Student_details (Student_name, Address)
SELECT Teacher_name, Address FROM Teacher_details;
শুধুমাত্র "ঢাকা" ঠিকানার(Address) অন্তর্ভুক্ত শিক্ষকের তথ্য কপি করে "Student_details" টেবিলে রাখিঃ
INSERT INTO Student_details (Student_name, Address)
SELECT Teacher_name, Address FROM Teacher_details
WHERE Address="ঢাকা";
একটি টেবিলের ডিফল্ট ভ্যালু NULL থাকে।
কোনো ফিল্ডে(কলামে) NOT NULL কনস্ট্রেইন্ট(Constraint) সেট করলে সেই ফিল্ড(কলাম) ফাঁকা(NULL ) ভ্যালু গ্রহণ করে না। সুতরাং NOT NULL কনস্ট্রেইন্টটি সংশ্লিষ্ট ফিল্ডে ভ্যালু রাখতে বাধ্য করে। অর্থাৎ আপনি টেবিলে কোন তথ্য ইনসার্ট অথবা আপডেট করতে চাইলে ঐ ফিল্ডে অবশ্যই ভ্যালু ইনসার্ট করতে হবে, অন্যথায় টেবিলে কোন তথ্য ইনসার্ট অথবা আপডেট করতে পারবেন না।
নিম্নের SQL কনস্ট্রেইন্টটি "Roll_number" এবং "Student_name" কলামে NULL ভ্যালু গ্রহণ করবে নাঃ
CREATE TABLE Student_NotNull(
Id int auto_increment,
Roll_number varchar(255) NOT NULL,
Student_name varchar(255) NOT NULL,
Address varchar(255)
);
উপরের তৈরিকৃত টেবিলের "Roll_number" এবং "Student_name" কলামে তথ্য ইনপুট করা ব্যাতিত সম্পূর্ণ টেবিলে কোন তথ্য ইনপুট বা আপডেট করা যাবে না।
UNIQUE কনস্ট্রেইন্ট(Constraint) দ্বারা ডেটাবেজে ইউনিক(Unique) রেকর্ড ইনসার্ট করা হয়। এক বা একাধিক কলামের রেকর্ডকে ইউনিক করতে UNIQUE এবং PRIMARY KEYকনস্ট্রেইন্ট উভই ব্যবহার করা হয়। একটি PRIMARY KEY কনস্ট্রেইন্ট এর মধ্যে স্বয়ংক্রিয়ভাবে UNIQUE কনস্ট্রেইন্ট ডিফাইন করা থাকে।
মনে রাখবেন, একটি টেবিলের একাধিক কলামে UNIQUE কনস্ট্রেইন্ট থাকতে পারে কিন্তু একটি টেবিলের শুধুমাত্র একটি কলামেই PRIMARY KEY কনস্ট্রেইন্ট ব্যবহার করা যায়।
নিম্নের SQL স্টেটম্রন্টটি "Student_details" টেবিল তৈরির সময় "Roll_number" কলামটি UNIQUE কনস্ট্রেইন্ট এর মাধ্যমে ইউনিক হবে।
MySQL এর জন্যঃ
CREATE TABLE Student_details(
Id int NOT NUll,
Roll_number varchar(255),
Student_name varchar(255),
Institute varchar(255),
Address varchar(255),
UNIQUE(roll_number)
);
Oracle/SQL Server/MS Access এর জন্যঃ
CREATE TABLE Student_details(
Id int NOT NUll,
Roll_number varchar(255) UNIQUE,
Student_name varchar(255),
Institute varchar(255),
Address varchar(255)
);
একটি UNIQUE কনস্ট্রেইন্ট এর নাম দেওয়ার জন্য এবং একাধিক কলামে UNIQUE কনস্ট্রেইন্ট ডিফাইন করার জন্য নিম্নের SQL সিনট্যাক্সটি ব্যবহার করা হয়।
MySQL/Oracle/SQL Server/MS Access এর জন্যঃ
CREATE TABLE Student_details(
Id int NOT NUll,
Roll_number varchar(255),
Student_name varchar(255),
Institute varchar(255),
Address varchar(255),
CONSTRAINT Student_id UNIQUE (Id, Roll_number)
);
ডেটাবেজে পূর্ব থেকে বিদ্যমান একটি টেবিলের "Id" কলামকে UNIQUE করতে ALTER TABLEস্টেটমেন্টটের সাথে নিম্নের ন্যায় AND UNIQUE কনস্ট্রেইন্ট ব্যবহার করা হয়ঃ
MySQL/Oracle/SQL Server/MS Access এর জন্যঃ
ALTER TABLE Student_details
ADD UNIQUE (Id);
একটি UNIQUE কনস্ট্রেইন্ট এর নাম দেওয়ার জন্য এবং একাধিক কলামে UNIQUE কনস্ট্রেইন্ট ডিফাইন করার জন্য নিম্নের SQL সিনট্যাক্সটি ব্যবহার করা হয়।
MySQL/Oracle/SQL Server/MS Access এর জন্যঃ
ALTER TABLE Student_details
ADD CONSTRAINT Student_id UNIQUE (Id, Roll_number);
UNIQUE কনস্ট্রেইন্ট ডিলেট করতে নিম্নের SQL স্টেটমেন্টটি ব্যবহার করা হয়ঃ
MySQL এর জন্যঃ
ALTER TABLE Student_details
DROP INDEX Student_id;
Oracle/SQL Server/MS Access এর জন্যঃ
ALTER TABLE Student_details
DROP CONSTRAINT Student_id;
Default কনস্ট্রেইন্ট(Constraint) ব্যবহার করে কলামের মধ্যে একটি ডিফল্ট(Default) ভ্যালু ইনপুট করা যায়। কলামে কোন নির্দিষ্ট মান ইনপুট না করা হলে সকল নতুন রেকর্ডের মধ্যে স্বয়ংক্রিয়ভাবে Defaultভ্যালুটি যোগ হয়ে যায়।
নিম্নের SQL স্টেটমেন্টটি "Student_details" টেবিল তৈরী করার সময় "Institute" কলামে Default কনস্ট্রেইন্ট সেট করবেঃ
MySQL /Oracle/ SQL Server/MS Access এর জন্যঃ
CREATE TABLE Student_details(
Id int NOT NUll,
Roll_number varchar(255),
Student_name varchar(255),
Institute varchar(255) DEFAULT 'জাতীয় বিশ্ববিদ্যালয়',
Address varchar(255)
);
সিস্টেম ভ্যালু ইনর্সাট করার জন্য ফাংসশন যেমন-GETDATE() এর সাথেও Default কনস্ট্রেইন্ট ব্যবহার করা হয়ঃ
CREATE TABLE Student_attendance(
Id int NOT NUll,
Roll_number varchar(255),
Attendance varchar(255),
Admission_date date DEFAULT GETDATE()
);
নিম্নের SQL স্টেটমেন্টটি পূর্বে তৈরিকৃত "Student_details" টেবিলের "Institute" কলামে Default কনস্ট্রেইন্ট সেট করবেঃ
MySQL এর জন্যঃ
ALTER TABLE Student_details
ALTER Institute SET DEFAULT 'জাতীয় বিশ্ববিদ্যালয়';
Oracle এর জন্যঃ
ALTER TABLE Student_details
MODIFY Institute DEFAULT 'জাতীয় বিশ্ববিদ্যালয়';
SQL Server/MS Access এর জন্যঃ
ALTER TABLE Student_details
ALTER COLUMN Institute SET DEFAULT 'জাতীয় বিশ্ববিদ্যালয়';
একটি Default কনস্ট্রেইন্ট ডিলিট করতে নিম্নের SQL স্টেটমেন্টটি ব্যবহার করুনঃ
MySQL এর জন্যঃ
ALTER TABLE Student_details
ALTER Institute DROP DEFAULT;
Oracle/SQL Server/MS Access এর জন্যঃ
ALTER TABLE Student_details
ALTER COLUMN Institute DROP DEFAULT;
একটি কলাম কতটি ভ্যালু গ্রহণ করবে তার রেঞ্জ নির্ধারন করতে CHECKকনস্ট্রেইন্ট(Constraint) ব্যবহার করা হয়। আপনি যদি একটি নির্দিষ্ট কলামের জন্য CHECKকনস্ট্রেইন্ট নির্ধারন করে দেন তাহলে এটি শুধুমাত্র ঐ কলামের ভ্যালুর জন্যই প্রযোজ্য হবে। আপনি যদি একটি টেবিলের জন্য কনস্ট্রেইন্ট ডিফাইন করে থাকেন তাহলে তা টেবিলে অন্তর্ভূূক্ত সকল কলামের জন্যই প্রযোজ্য হবে।
নিম্নের SQL স্টেটমেন্টটি "Student_details" টেবিল তৈরী করার সময় "Id" কলামে CHECKকনস্ট্রেইন্ট সেট করবে। এক্ষেত্রে CHECKকনস্ট্রেইন্ট নির্ধারন করে দিবে যেন "Id" কলামের ভ্যালু-সমূহ শূণ্য(0) থেকে বড় হয়।
MySQL এর জন্যঃ
CREATE TABLE Student_details(
Id int NOT NUll,
Roll_number varchar(255),
Student_name varchar(255),
Institute varchar(255),
Address varchar(255),
CHECK (Id>0)
);
Oracle/SQL Server/MS Acces এর জন্যঃ
CREATE TABLE Student_details(
Id int NOT NUll CHECK (Id>0),
Roll_number varchar(255),
Student_name varchar(255),
Institute varchar(255),
Address varchar(255)
);
একটি CHECKকনস্ট্রেইন্ট এর নাম দেওয়ার জন্য এবং একাধিক কলামে CHECKকনস্ট্রেইন্ট ডিফাইন করার জন্য নিম্নের SQL সিনট্যাক্সটি ব্যবহার করা হয়।
MySQL / SQL Server / Oracle / MS Access এর জন্যঃ
CREATE TABLE Student_details(
Id int NOT NUll,
Roll_number varchar(255),
Student_name varchar(255),
Institute varchar(255),
Address varchar(255),
CONSTRAINT check_student CHECK (Id>0 AND Address='জাতীয় বিশ্ববিদ্যালয়')
);
ডেটাবেজে পূর্ব থেকে বিদ্যমান একটি টেবিলের "Id" কলামে CHECK সেট করতে ALTER TABLE স্টেটমেন্টটের সাথে নিম্নের ন্যায় ADD CHECK কনস্ট্রেইন্ট ব্যবহার করা হয়ঃ
MySQL/Oracle/SQL Server/MS Access এর জন্যঃ
ALTER TABLE Student_details
ADD CHECK (Id>0);
একটি CHECKকনস্ট্রেইন্ট এর নাম দেওয়ার জন্য এবং একাধিক কলামে CHECKকনস্ট্রেইন্ট ডিফাইন করার জন্য নিম্নের SQL সিনট্যাক্সটি ব্যবহার করা হয়।
MySQL/Oracle/SQL Server/MS Access এর জন্যঃ
ALTER TABLE Student_details
ADD CONSTRAINT check_student CHECK (Id>0 AND Address='জাতীয় বিশ্ববিদ্যালয়');
একটি CHECKকনস্ট্রেইন্ট ডিলেট করতে, নিম্নের SQL সিনট্যাক্সটি ব্যবহার করা হয়ঃ
MySQL এর জন্যঃ
ALTER TABLE Student_details
DROP CHECK check_student;
MySQL/Oracle/SQL Server/MS Access এর জন্যঃ
ALTER TABLE Student_details
DROP CONSTRAINT check_student;
PRIMARY
KEY
কনস্ট্রেইন্ট(Constraint) ডেটাবেজ টেবিলের প্রতিটি রেকর্ডকে ইউনিকভাবেে শনাক্ত করে। Primary
key
এর ভ্যালু-সমূহ অবশ্যই ইউনিক হতে হবে।
primary
key
বিশিষ্ট কলামে NULL
ভ্যালু থাকতে পারবে না। অশিকাংশ টেবিলেই primary
key
থাকা উচিৎ এবং প্রত্যেক টেবিলে শুধুমাত্র একটি primary
key
থাকতে পারবে।
নিম্নের SQL স্টেটমেন্টটি "Student_details" টেবিল তৈরির সময় "Id" কলামে PRIMARY
KEY
কনস্ট্রেইন্ট সেট করবেঃ
MySQL এর জন্যঃ
CREATE TABLE Student_details(
Id int NOT NUll,
Roll_number varchar(255),
Student_name varchar(255),
Institute varchar(255),
Address varchar(255),
PRIMARY KEY (Id)
);
Oracle/SQL Server/MS Access এর জন্যঃ
CREATE TABLE Student_details(
Id int NOT NUll PRIMARY KEY,
Roll_number varchar(255),
Student_name varchar(255),
Institute varchar(255),
Address varchar(255)
);
একটি PRIMARY
KEY
কনস্ট্রেইন্ট এর নাম দেওয়ার জন্য এবং একাধিক কলামে PRIMARY
KEY
কনস্ট্রেইন্ট ডিফাইন করার জন্য নিম্নের SQL সিনট্যাক্সটি ব্যবহার করা হয়ঃ
MySQL/Oracle/SQL Server/MS Access এর জন্যঃ
CREATE TABLE Student_details(
Id int NOT NUll PRIMARY KEY,
Roll_number varchar(255),
Student_name varchar(255),
Institute varchar(255),
Address varchar(255),
CONSTRAINT Student_Id PRIMARY KEY (Id,Roll_number)
);
বিঃদ্রঃ উপরের উদাহরণে শুধুমাত্র একটি PRIMARY
KEY
(Student_Id) রয়েছে। যদিও primary
key
ভ্যালুটি দুইটি কলামের(Id + Roll_number) উপর ভিত্তি করে গঠিত।
ডেটাবেজে পূর্ব থেকে বিদ্যমান একটি টেবিলের "Id" কলামে PRIMARY
KEY
সেট করতে ALTER
TABLE
স্টেটমেন্টটের সাথে নিম্নের ন্যায় add
PRIMARY
KEY
কনস্ট্রেইন্ট ব্যবহার করা হয়ঃ
MySQL/Oracle/SQL Server/MS Access এর জন্যঃ
ALTER TABLE Student_details(
ADD PRIMARY KEY (Id);
একটি PRIMARY
KEY
কনস্ট্রেইন্ট এর নাম দেওয়ার জন্য এবং একাধিক কলামে PRIMARY
KEY
কনস্ট্রেইন্ট ডিফাইন করার জন্য নিম্নের SQL সিনট্যক্সটি ব্যবহার করা হয়।
মাMySQL/Oracle/SQL Server/MS Access এর জন্যঃ
ALTER TABLE Student_details(
ADD CONSTRAINT Student_Id PRIMARY KEY (Id,Roll_number);
বিঃদ্রঃ ALTER
TABLE
স্টেটমেন্ট ব্যবহার করে কোনো কলামে primary
key
যোগ করতে হলে টেবিল তৈরির সময়ে ঐ কলামকে অবশ্যই প্রাইমারি কী কলাম হিসাবে ডিক্লেয়ার করতে হবে যেন সে NULL
ভ্যালু গ্রহণ করতে না পারে।
PRIMARY
KEY
কনস্ট্রেইন্ট ডিলেট করতে নিম্নের SQL স্টেটমেন্টটি ব্যবহার করা হয়ঃ
MySQL এর জন্যঃ
ALTER TABLE Student_details(
DROP PRIMARY KEY;
Oracle/SQL Server/MS Access এর জন্যঃ
ALTER TABLE Student_details(
DROP CONSTRAINT Student_Id;
এক টেবিলের FOREIGN
KEY
অন্য টেবিলের PRIMARY
KEY
কে নির্দেশ করে। সুতরাং দুটি টেবিলের মধ্যে সংযোগ সৃষ্টি করে।
দুটি টেবিলের সংযোগ বিচ্ছিন্ন করে এমন ক্রিয়া কলাপে FOREIGN
KEY
কনস্ট্রেইন্ট বাধা দেয়।
FOREIGN
KEY
কনস্ট্রেইন্ট ফরেন কী কলামে অবৈধ ডেটা ইনপুটেও বাধা দেয়, কারন প্রাইমারি কী কলাম এর ভ্যালুই হলো ফরেন কি কলাম এর ভ্যালু।
চলুন একটি উদাহরণের সাহায্য FOREIGN
KEY
বুঝার চেষ্টা করি। নিম্নের টেবিল দুটিতে ভালভাবে লক্ষ্য করুনঃ
নিচের অংশটি "Student_details" টেবিল থেকে নেওয়া হয়েছেঃ
আইডি নং | রোল নাম্বার | শিক্ষার্থীর নাম | প্রতিষ্ঠানের নাম | ঠিকানা |
---|---|---|---|---|
১ | ১০১ | তামজীদ হাসান | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
২ | ১০২ | মিনহাজুর রহমান | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
৩ | ১০৩ | মোঃ সবুজ হোসেন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
৪ | ১০৪ | ইয়াসিন হোসেন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
৫ | ১০৫ | ফরহাদ উদ্দিন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
নিচের অংশটি "Student_result" টেবিল থেকে নেওয়া হয়েছেঃ
আইডি নং | রোল নাম্বার | ফলাফল |
---|---|---|
১ | ১০১ | A+ |
২ | ১০২ | A+ |
৩ | ১০৩ | A+ |
৪ | ১০৪ | A+ |
৫ | ১০৫ | A+ |
উপরের টেবিল দুটিতে লক্ষ্য করলে দেখবেন, "Student_result" টেবিলের "Roll_number" কলামটি "Student_details" টেবিলের "Roll_number" কলামকে নির্দেশ(Point) করছে।
"Student_details" টেবিলের "Roll_number" কলামটি হচ্ছে ঐ টেবিলের PRIMARY
KEY
কনস্ট্রেইন্ট এবং "Student_result" টেবিলের "Roll_number" কলামটি হচ্ছে "Student_result" টেবিলের FOREIGN
KEY
কনস্ট্রেইন্ট।
বিঃদ্রঃ PRIMARY
KEY
এবং FOREIGN
KEY
কে যথাক্রমে পিতা এবং পুত্র বলা হয়। পুত্রের কোনো কিছু প্রয়োজন হলে সে পিতার কাছেই চাই। একইভাবে FOREIGN
KEY
তার প্রয়োজনে PRIMARY
KEY
এর কাছে রেফার করে।
নিম্নের SQL স্টেটমেন্টটি "Student_result" টেবিল তৈরি করার সময় "Roll_number" কলামে একটি FOREIGN
KEY
কনস্ট্রেইন্ট সেট করবেঃ
MySQL এর জন্যঃ
CREATE TABLE Student_result(
Id int NOT NUll,
Roll_number varchar(255) NOT NULL,
Result varchar(255) NOT NULL,
PRIMARY KEY (Id),
FOREIGN KEY (Roll_number) REFERENCES Student_details(Roll_number)
);
Oracle/SQL Server/MS Access এর জন্যঃ
CREATE TABLE Student_result(
Id int NOT NUll,
Roll_number varchar(255) FOREIGN KEY REFERENCES Student_details(Roll_number),
Result varchar(255) NOT NULL
);
FOREIGN
KEY
কনস্ট্রেইন্ট এর নামকরন এবং একাধিক কলামে FOREIGN
KEY
কনস্ট্রেইন্ট ডিফাইন করতে নিম্নের SQL স্টেটমেন্টটি ব্যবহার করা হয়ঃ
MySQL/Oracle/SQL Server/MS Access এর জন্যঃ
CREATE TABLE Student_result(
Id int NOT NUll,
Roll_number varchar(255) NOT NULL,
Result varchar(255) NOT NULL,
PRIMARY KEY (Id),
CONSTRAINT link_Student_result FOREIGN KEY(Roll_number) REFERENCES Student_details(Roll_number)
);
নিম্নের SQL স্টেটমেন্টটি "Student_result" টেবিল পরিবর্তন(modify) করার সময় "Roll_number" কলামে FOREIGN
KEY
কনস্ট্রেইন্ট সেট করবেঃ
MySQL/Oracle/SQL Server/MS Access এর জন্যঃ
ALTER TABLE Student_result
ADD FOREIGN KEY (Roll_number)
REFERENCES Student_details(Roll_number);
FOREIGN
KEY
কনস্ট্রেইন্ট এর নামকরন এবং একাধিক কলামে FOREIGN
KEY
কনস্ট্রেইন্ট ডিফাইন করতে নিম্নের SQL স্টেটমেন্টটি ব্যবহার করা হয়ঃ
MySQL/Oracle/SQL Server/MS Access এর জন্যঃ
ALTER TABLE Student_result
ADD CONSTRAINT link_Student_result
ADD FOREIGN KEY (Roll_number)
REFERENCES Student_details(Roll_number);
FOREIGN
KEY
কনস্ট্রেইন্টকে ডিলেট করতে নিম্নের SQL স্টেটমেন্টটি ব্যবহার করুনঃ
MySQL এর জন্যঃ
ALTER TABLE Student_result
DROP FOREIGN KEY link_Student_result;
Oracle/SQL Server/MS Access এর জন্যঃ
ALTER TABLE Student_result
DROP CONSTRAINT link_Student_result;
IN
অপারেটর দ্বারা WHERE
clause
এর মধ্যে একত্রে একাধিক ভ্যালু উল্লেখ করা যায়।
SELECT name_of_column's
FROM name_of_table
WHERE name_of_column IN (value_1, value_2,...);
IN
অপারেটর এর ব্যবহার দেখার জন্য আমরা আমাদের নমুনা ডেটাবেজ Student ব্যবহার করবো।
নিচের অংশটি "Student_details" টেবিল থেকে নেওয়া হয়েছেঃ
আইডি নং | রোল নাম্বার | শিক্ষার্থীর নাম | প্রতিষ্ঠানের নাম | ঠিকানা |
---|---|---|---|---|
১ | ১০১ | তামজীদ হাসান | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
২ | ১০২ | মিনহাজুর রহমান | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
৩ | ১০৩ | মোঃ সবুজ হোসেন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
৪ | ১০৪ | ইয়াসিন হোসেন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
৫ | ১০৫ | ফরহাদ উদ্দিন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
নিম্নের SQL IN
স্টেটমেন্টটি "Student_details" টেবিল থেকে "ঢাকা" অথবা "রাজশাহী" শহরের রেকর্ডকে সিলেক্ট করবেঃ
SELECT * FROM Student_details
WHERE Address IN ('ঢাকা','রাজশাহী');
একটি নির্দিষ্ট রেঞ্জের মধ্যে ভ্যালু সিলেক্ট করার জন্য SQL BETWEEN
অপারেটর ব্যবহার করা হয়।
BETWEEN
অপারেটর একটি নির্দিষ্ট রেঞ্জের ভ্যালু সিলেক্ট করে। এই ভ্যালু-সমূহ টেক্সট, সংখ্যা অথবা তারিখ হতে পারে।
SELECT name_of_column's
FROM name_of_table
WHERE name_of_column BETWEEN value_1 AND value_2;
IN
অপারেটর এর ব্যবহার দেখার জন্য আমরা আমাদের নমুনা ডেটাবেজ Student ব্যবহার করবো।
নিচের অংশটি "Student_details" টেবিল থেকে নেওয়া হয়েছেঃ
আইডি নং | রোল নাম্বার | শিক্ষার্থীর নাম | প্রতিষ্ঠানের নাম | ঠিকানা |
---|---|---|---|---|
১ | ১০১ | তামজীদ হাসান | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
২ | ১০২ | মিনহাজুর রহমান | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
৩ | ১০৩ | মোঃ সবুজ হোসেন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
৪ | ১০৪ | ইয়াসিন হোসেন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
৫ | ১০৫ | ফরহাদ উদ্দিন | জাতীয় বিশ্ববিদ্যালয় | চাঁদপুর |
নিম্নের SQL BETWEEN
স্টেটমেন্টটি "Student_details" টেবিলের "Roll_number" কলামের ১০১ থেকে ১০৫ রেঞ্জ পর্যন্ত সকল রেকর্ড গুলো নিয়ে আসবেঃ
উদাহরণ
SELECT * FROM Student_details
WHERE Roll_number BETWEEN '১০১' AND '১০৫';
সতর্কতাঃ BETWEEN
অপারেটরটি বিভিন্ন ডেটাবেজে বিভিন্ন ফলাফল দেখাতে পারে!
BETWEEN
অপারেটরটি টেষ্ট ভ্যালুসহ এর মাঝখানের ভ্যালুগুলোর জন্য ফলাফল দেয়।সুতরাং BETWEEN
নিয়ে কাজ করার পূর্বে BETWEEN
অপারেটরটি আপনার ডেটাবেজে কিভাবে কাজ করে তা চেক করে দেখুন!
পূর্ববর্তী উদাহরণে আমরা রেঞ্জের ভিতরের ভ্যলু-সমূহ সিলেক্ট করেছিলাম। আর এই উদাহরণে আমরা ঐ নির্দিষ্ট রেঞ্জের বাইরের ভ্যালু-সমূহ সিলেক্ট করবো। এজন্য আমরা BETWEEN
এর পরিবর্তে NOT
BETWEEN
ব্যবহার করবো।
উদাহরণ
SELECT * FROM Student_details
WHERE Roll_number NOT BETWEEN '১০১' AND '১০৫';
নিম্নের SQL স্টেটমেন্টটি "Student_details" টেবিলের "Roll_number" কলামের ১০১ থেকে ১১০ রেঞ্জ পর্যন্ত রেকর্ড গুলো নিয়ে আসবে, কিন্তু ৪, ৭ এবং ৯ "Id" বিশিষ্ট রেকর্ড গুলো দেখাবে নাঃ
উদাহরণ
SELECT * FROM Student_details
WHERE (Roll_number BETWEEN '১০১' AND '১১০')
AND NOT Id IN(৪, ৭, ৯);
নিম্নের SQL স্টেটমেন্টটি "Student_details" টেবিল এর রেকর্ড-সমূহের মধ্যে যে সকল "শিক্ষার্থীর নাম(Student_name)" 'ক' থেকে 'ম' পর্যন্ত অক্ষর দ্বারা শুরু হয়েছে শুধুমাত্র তাদেরকে নিয়ে আসবেঃ
উদাহরণ
SELECT * FROM Student_details
WHERE Student_name BETWEEN 'ক' AND 'ম';
নিম্নের SQL স্টেটমেন্টটি "Student_details" টেবিল এর রেকর্ড-সমূহের মধ্যে যে সকল "শিক্ষার্থীর নাম(Student_name)" 'ক' থেকে 'ম' পর্যন্ত অক্ষর দ্বারা শুরু হয়েছে শুধুমাত্র তাদেরকে ছাড়া বাকীদেরকে নিয়ে আসবেঃ
উদাহরণ
SELECT * FROM Student_details
WHERE Student_name NOT BETWEEN 'ক' AND 'ম';
নিচের অংশটি "Student_attendance" টেবিল থেকে নেওয়া হয়েছেঃ
আইডি নং | রোল নাম্বার | শতকরা উপস্থিতি | ভর্তির তারিখ |
---|---|---|---|
১ | ১০১ | ৮৯% | ০১-১১-২০১৫ |
২ | ১০২ | ৯১% | ০১-১১-২০১৫ |
৩ | ১০৩ | ৮০% | ০১-১১-২০১৫ |
৪ | ১০৪ | ৭৫% | ০২-১১-২০১৫ |
৫ | ১০৫ | ৭৭% | ০২-১১-২০১৫ |
নিম্নের SQL স্টেটমেন্টটি "Student_attendance" টেবিল এর রেকর্ড-সমূহের মধ্যে যে সকল শিক্ষার্থীর "ভর্তির তারিখ(Admission_date)" '০১-১১-২০১৫' থেকে '১০-১১-২০১৫' এর মধ্যে শুধুমাত্র তাদেরকে নিয়ে আসবেঃ
উদাহরণ
SELECT * FROM Student_attendance
WHERE Admission_date BETWEEN '০১-১১-২০১৫' AND '১০-১১-২০১৫'
যখন কোনো টেবিলের মধ্যে নতুন তথ্য যোগ করা হবে তখন Auto
-
increment
এট্রিবিউটটি একটি নির্দিষ্ট কলামের জন্য একটি ইউনিক নম্বর তৈরি করবে।
Auto
-
increment
এট্রিবিউটটি ডেটাবেজ টেবিলের প্রত্যেক নতুন সারির জন্য একটি ইউনিক আইডেন্টিটি জেনারেট করে। ডেটাবেজ টেবিলে তথ্য ইনপুট করার সময় আপনি এমনটা চাইতেই পারেন যে, প্রত্যেক সারি ইনপুটের জন্য একটি ইউনিক নম্বর তৈরি হোক।
এক্ষেত্রে আপনি একটি auto
-
increment
ফিল্ড(column) তৈরি করতে পারেন। আপনার নতুন তথ্য ইনপুট করার সাথে সাথে প্রত্যেক সারি ইনপুটের জন্য এটি স্বয়ংক্রিয়ভাবে একটি ইউনিক নম্বর জেনারেট করবে।
প্রতি ফিল্ডের ক্ষেত্রে এটি স্বয়ংক্রিয়ভাবে বৃদ্ধি পাবে। আর আমরা বেশীরভাগ সময়েই চাই টেবিলে নতুন তথ্য যোগ হওয়ার সাথে সাথে primary
key
এর মান স্বয়ংক্রিয়ভাবে তৈরি হয়ে যাক।। টেবিলের মধ্যে auto
-
increment
ফিল্ড তৈরি করার মাধ্যমে আমরা এটি করতে পারি।
নিম্নের SQL স্টেটমেন্টটি "Student_details" টেবিলের "Id" কলামকে primary
key
ফিল্ডে রূপান্তর করবে এবং এটি auto
-
increment
হবেঃ
CREATE TABLE Student_details(
Id int NOT NUll AUTO_INCREMENT,
Roll_number varchar(255),
Student_name varchar(255),
Institute varchar(255),
Address varchar(255),
PRIMARY KEY (Id)
);
MySQL এ কোনো ফিল্ডের মান স্বয়ংক্রিয়ভাবে বৃদ্ধি করার জন্য AUTO_INCREMENT
কিওয়ার্ডটি ব্যবহার করা হয়। ডিফল্টভাবে AUTO_INCREMENT
এর মান ১ থেকে শুরু হয় এবং প্রতিটি নতুন রেকর্ডের জন্য ১ করে বৃদ্ধি পায়।
যদি AUTO_INCREMENT
এর মান অন্য কোনো মান দ্বারা শুরু করতে চান তাহলে নিম্নের SQL স্টেটমেন্টটি ব্যবহার করতে হবেঃ
ALTER TABLE Student_details AUTO_INCREMENT=100;
যখন আমরা "Student_details" টেবিলে তথ্য ইনপুট করবো তখন "Id" কলামের জন্য কোনো তথ্য ইনপুট করবো না, কারন এর জন্য একটি ইউনিক মান স্বয়ংক্রিয়ভাবে যুক্ত হয়ে যাবেঃ
INSERT INTO Student_details (Roll_number,Student_name)
VALUES ('১৩১','শাহরিয়ার হাসান');
উপরের SQL স্টেটমেন্টটি "Student_details" টেবিলে একটি নতুন তথ্য ইনপুট করবে।
"Id" কলামে স্বয়ংক্রিয়ভাবেই একটি ইউনিক মান যুক্ত হয়ে যাবে। "রোল নাম্বার(Roll_number)" কলামে "১৩১" এবং "শিক্ষার্থীর নাম(Student_name)" কলামে "শাহরিয়ার হাসান" মান যুক্ত করবে।
নিম্নের SQL স্টেটমেন্টটি "Student_details" টেবিলের "Id" কলামকে primary
key
ফিল্ডে রূপান্তর করবে এবং এটি auto
-
increment
হবেঃ
CREATE TABLE Student_details(
Id int IDENTITY(1,1) PRIMARY KEY,
Roll_number varchar(255),
Student_name varchar(255),
Institute varchar(255),
Address varchar(255)
);
MS SQL Server-এ কোনো ফিল্ডের মান স্বয়ংক্রিয়ভাবে বৃদ্ধি করার জন্য IDENTITY
কিওয়ার্ডটি ব্যবহার করা হয়। ডিফল্টভাবে IDENTITY
এর মান ১ থেকে শুরু হয় এবং প্রতিটি নতুন রেকর্ডের জন্য ১ করে বৃদ্ধি পায়।
বিঃদ্রঃ আপনি "Id" কলামের শুরুর মান এবং বৃদ্ধি হওয়ার মান নির্দিষ্ট করে দেওয়ার জন্য নিম্নের সিনট্যাক্সটি ব্যবহার করতে পারেনঃ
IDENTITY(শুরুর মান, বৃদ্ধির মান)
আমরা যখন "Student_details" টেবিলে তথ্য ইনপুট করবো তখন "Id" কলামের জন্য কোনো তথ্য ইনপুট করবো না, কারন এর জন্য টেবিলে একটি ইউনিক মান স্বয়ংক্রিয়ভাবে যুক্ত হয়ে যাবেঃ
INSERT INTO Student_details (Roll_number,Student_name)
VALUES ('১৩১','শাহরিয়ার হাসান');
উপরের SQL স্টেটমেন্টটি "Student_details" টেবিলে একটি নতুন তথ্য ইনপুট করবে। "Id" কলামে একটি মান স্বয়ংক্রিয়ভাবে যুক্ত হয়ে যাবে। আর "রোল নাম্বার(Roll_number)" কলামে "১৩১" এবং "শিক্ষার্থীর নাম(Student_name)" কলামে "শাহরিয়ার হাসান" মান যুক্ত করবে।
নিম্নের SQL স্টেটমেন্টটি "Student_details" টেবিলের "Id" কলামকে primary
key
ফিল্ডে রূপান্তর করবে এবং এটি auto
-
increment
হবেঃ
CREATE TABLE Student_details(
Id Integer PRIMARY KEY AUTOINCREMENT,
Roll_number varchar(255),
Student_name varchar(255),
Institute varchar(255),
Address varchar(255)
);
MS Access -এ কোনো ফিল্ডের মান স্বয়ংক্রিয়ভাবে বৃদ্ধি করার জন্য AUTOINCREMENT
কিওয়ার্ডটি ব্যবহার করা হয়। ডিফল্টভাবে AUTOINCREMENT
এর মান ১ থেকে শুরু হয় এবং প্রতিটি নতুন রেকর্ডের জন্য ১ করে বৃদ্ধি পায়।
বিঃদ্রঃ আপনি "Id" কলামের শুরুর মান এবং বৃদ্ধি হওয়ার মান নির্দিষ্ট করে দেওয়ার জন্য নিম্নের সিন্ট্যাক্সটি ব্যবহার করতে পারেনঃ
IDENTITY(শুরুর মান, বৃদ্ধির মান)
আমরা যখন "Student_details" টেবিলে তথ্য ইনপুট করবো তখন "Id" কলামের জন্য কোনো তথ্য ইনপুট করবো না, কারন এর জন্য টেবিলে একটি ইউনিক মান স্বয়ংক্রিয়ভাবে যুক্ত হয়ে যাবেঃ
INSERT INTO Student_details (Roll_number,Student_name)
VALUES ('১৩১','শাহরিয়ার হাসান');
উপরের SQL স্টেটমেন্টটি "Student_details" টেবিলে একটি নতুন তথ্য ইনপুট করবে। "Id" কলামে স্বয়ংক্রিয়ভাবেই একটি ইউনিক মান যুক্ত হয়ে যাবে। "রোল নাম্বার(Roll_number)" কলামে "১৩১" এবং "শিক্ষার্থীর নাম(Student_name)" কলামে "শাহরিয়ার হাসান" মান যুক্ত করবে।
উপরের কোড থেকে ওরাকলের কোড একটু ভিন্ন। সিকুয়েন্স অবজেক্টের মাধ্যমে আপনি একটি auto
-
increment
ফিল্ড তৈরি করতে পারেন। এই অবজেক্টটি নম্বরের একটি সিকুয়েন্স অবজেক্ট তৈরি করে।
নিম্নে CREATE
SEQUENCE
এর সিনট্যাক্স দেওয়া হলঃ
CREATE SEQUENCE Student_id
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 10
উপরের কোডটি "Student_id" নামে একটি সিকুয়েন্স অবজেক্ট তৈরি করবে। যাহা ১ থেকে শুরু হবে এবং এক এক করে বৃদ্ধি পাবে। এছাড়া এটি পারফরম্যান্সের জন্য ১০ টি পর্যন্ত মান ক্যাশ(cache) করে রাখবে। মেমরি দ্রুত অ্যাক্সেস করার জন্য ক্যাশ অপসনটি মেমোরিতে জমাকৃত মান নির্ধারন করে। ।
এখন আমরা "Student_details" টেবিলে নতুন তথ্য ইনপুট করবো। এক্ষেত্রে আমরা nextval
ফাংশনটি ব্যবহার করবো। এই ফাংশনটি "Student_id" সিকুয়েন্স থেকে পরবর্তী মান ধারন করবেঃ
INSERT INTO Student_details (Id, Roll_number,Student_name)
VALUES (Student_id.nextval, '১৩১','শাহরিয়ার হাসান');
উপরের SQL স্টেটমেন্টটি "Student_details" টেবিলে একটি নতুন তথ্য ইনপুট করবে। Student_id সিকুয়েন্স থেকে "Id" কলামে স্বয়ংক্রিয়ভাবেই ইউনিক মান যুক্ত হয়ে যাবে। "রোল নাম্বার(Roll_number)" কলামে "১৩১" এবং "শিক্ষার্থীর নাম(Student_name)" কলামে "শাহরিয়ার হাসান" মান যুক্ত করবে।
আরও দেখুন...